/**
 * @addtogroup brd_common
 * brd_common
 * @{
 */
/**
 * @file brd_common.h
 * @brief 板级公共定义
 * @par 修改日志
 * <table>
 * <tr><th>Date <th>Version <th>Author <th>Description
 * <tr><td>2020-09-30 <td>1.0 <td>软件工程院 <td>创建初始版本
 * @copyright 杭州鸿泉物联网技术股份有限公司
 */

#ifndef _BRD_COMMON_H_
#define _BRD_COMMON_H_

#include <ofc_types.h>

#ifdef __linux
#pragma GCC visibility push(default)
#endif 

#ifdef __cplusplus
extern "C"
{
#endif

/** 
 * Brd_THandle类型
 */
typedef void * Brd_THandle;

/**
 * 板级初始化
 * @note 
 * -# 需要在其它板级层设备启动前调用 
 * -# 创建板级层资源
 * @return 无返回值
 */
void Brd_Init(void);

/**
 * 板级反初始化
 * @note 
 * -# 需要在其它板级层设备关闭后调用, 一般为下电前
 * -# 释放板级层资源
 * @return 无返回值
 */
void Brd_Done(void);

/**
 * 板级公共设备打开
 * @note 
 * -# 需要在调用其它板级Open函数前调用, 用于公共资源的管理
 * -# 管理的资源有: Dma, Analog, TimerServer, Flash, Partition
 * @return 无返回值
 */
void Brd_Open(void);

/**
 * 板级公共设备关闭
 * @note 
 * -# 需要在调用其它板级Close函数后调用, 用于公共资源的管理
 * -# 管理的资源有: Dma, Analog, TimerServer, Flash, Partition
 * @return 无返回值
 */
void Brd_Close(void);

/**
 * 使能全局中断
 * @note 
 * -# 需要与[Brd_DisableGlobalIrq](@ref Brd_DisableGlobalIrq)成对使用, 请勿单独调用
 * -# 请不要使用__enable_irq
 * @return 无返回值
 */
void Brd_EnableGlobalIrq(void);

/**
 * 禁止全局中断
 * @note 
 * -# 需要与[Brd_EnableGlobalIrq](@ref Brd_EnableGlobalIrq)成对使用, 请勿单独调用
 * -# 请不要使用__disable_irq
 * @return 无返回值
 */
void Brd_DisableGlobalIrq(void);

/**
 * 使能系统节拍定时器
 * @note
 * -# 需要与[Brd_DisableSysTick](@ref Brd_DisableSysTick)成对使用, 请勿单独调用
 * -# 一般用于退出低功耗后, [Brd_EnableGlobalIrq](@ref Brd_EnableGlobalIrq)之前
 * @return 无返回值
 */
void Brd_EnableSysTick(void);

/**
 * 禁止系统节拍定时器
 * @note
 * -# 需要与[Brd_EnableSysTick](@ref Brd_EnableSysTick)成对使用, 请勿单独调用
 * -# 一般用于进入低功耗前, [Brd_DisableGlobalIrq](@ref Brd_DisableGlobalIrq)之后
 * @return 无返回值
 */
void Brd_DisableSysTick(void);

/// 板级版本号
struct Brd_TVersionTag
{
    UInt8 ver[4];  ///< 主版本.次版本.修订版本.编译版本
    UInt32 build_time;  ///< 编译时间戳(UTC) 1970-1-1
};
typedef struct Brd_TVersionTag Brd_TVersion;

/**
 * 获取板级版本号
 * @return 版本号, 结构参考[brd_common](@ref Brd_TVersionTag)
 */
const Brd_TVersion *Brd_Version(void);

#ifdef __cplusplus
}  ///< extern "C"
#endif

#ifdef __linux
#pragma GCC visibility pop
#endif 

#endif // _BRD_COMMON_H_
/**
 * @} 
 */
